package com.odontosis.entidade;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.NotEmpty;

@SuppressWarnings("serial")
@Entity
@Table(name = "procedimento")
public class Procedimento extends OdontosisBusinessObject implements Comparable<Procedimento>{
	
	@NotEmpty
	@Column(name = "codigo")
	private String codigo;
	
	@NotEmpty
	@Column(name = "descricao")
	private String nome;
	
	@NotEmpty
	@Column(name = "valor")
	private Double valor;
	
	@Column(name = "manutencao")
	private boolean manutencao;
	
	@Enumerated(EnumType.STRING)
	private TipoProcedimento tipo;
	
	@ManyToMany(mappedBy = "listaProcedimentos")
	@JoinTable(name = "servicoconveniado_procedimento", joinColumns = @JoinColumn(name = "procedimento"), inverseJoinColumns = @JoinColumn(name = "servicoconveniado"))
	private List<ServicoConveniado> servicoConvenio;

	public String getCodigo() {
		return codigo;
	}

	@Transient
	public String getDescricao(){
		if(tipo == TipoProcedimento.LABORATORIO){
			return getNome() + " - LAB";
		}
		return getNome();
	}
	
	public String getNome() {
		return nome;
	}

	public Double getValor() {
		return valor;
	}

	public boolean isManutencao() {
		return manutencao;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public void setNome(String descricao) {
		this.nome = descricao;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public void setManutencao(boolean manutencao) {
		this.manutencao = manutencao;
	}

	public List<ServicoConveniado> getServicoConvenio() {
		return servicoConvenio;
	}

	public void setServicoConvenio(List<ServicoConveniado> servicoConvenio) {
		this.servicoConvenio = servicoConvenio;
	}

	@Override
	public int compareTo(Procedimento o) {
		return getNome().compareTo(o.getNome());
	}

	public TipoProcedimento getTipo() {
		return tipo;
	}

	public void setTipo(TipoProcedimento tipo) {
		this.tipo = tipo;
	}


}
